#pragma once

#include "../Core/IDisposable.h"
#include "ImageFormat.h"
#include "ImageDatatype.h"
#include "ReadPixelBuffer.h"
#include "WritePixelBuffer.h"
#include "Texture2DDescription.h"

namespace Renderer
{
	class Texture2D : public Core::IDisposable
	{
	public:
		virtual void Destroy() = 0;

		virtual void CopyFromBuffer(WritePixelBuffer* pixelBuffer, ImageFormat format, ImageDatatype dataType);

		virtual void CopyFromBuffer(WritePixelBuffer* pixelBuffer, ImageFormat format, ImageDatatype dataType, int rawAlignment);

		virtual void CopyFromBuffer(
			WritePixelBuffer* pixelBuffer,
			int xOffset,
			int yOffset,
			int width,
			int height,
			ImageFormat format,
			ImageDatatype dataType,
			int rawAlignment) = 0;

		virtual ReadPixelBuffer* CopyToBuffer(ImageFormat format, ImageDatatype dataType);

		virtual ReadPixelBuffer* CopyToBuffer(ImageFormat format, ImageDatatype dataType, int rowAlignment) = 0;

		virtual Texture2DDescription GetDescription() = 0;

	};
}